﻿#region License Information
// Copyright (c) 2005 - 2009, Allan Spartacus Mangune (allan@owlpal.com)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, 
// are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice, this list 
//   of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright notice, this list of 
//   conditions and the following disclaimer in the documentation and/or other materials provided 
//   with the distribution.
//
// * Neither the name of Owlpal nor the names of its contributors may be used to endorse or 
//   promote products derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Owlpal.Models;

namespace Owlpal.Models.Repositories
{
    public interface IBlogRepository : IRepository<Owlpal.Models.Blog>
    {
        /// <summary>
        /// Saves a Blog.
        /// </summary>
        /// <param name="userID"></param>
        /// <returns></returns>
        AddBlogStatus SaveBlog(Guid userID);

        /// <summary>
        /// Creates a Blog.
        /// </summary>
        /// <returns>Returns the status of the Add operation.</returns>
        AddBlogStatus SaveBlog(Owlpal.Models.Blog blog);

        /// <summary>
        /// Updates the Blog.
        /// </summary>
        /// <returns>Returns the status of the Edit operation.</returns>
        EditBlogStatus EditBlog(Owlpal.Models.Blog blog);

        /// <summary>
        /// Marks the record of Blog as deleted. 
        /// </summary>
        /// <returns>Returns the status of the Delete operation.</returns>
        DeleteBlogStatus DeleteBlog(Guid id);

        /// <summary>
        /// Permanently remove the record from the database.
        /// </summary>
        /// <returns>Returns the status of the Remove operation.</returns>
        RemoveBlogStatus RemoveBlog(Guid id);

        /// <summary>
        /// Loads a collection of Blog based on userID.
        /// </summary>
        /// <param name="userID">The unique ID of the blogs.</param>
        /// <returns>A collection of Blog.</returns>
        List<Owlpal.Models.Blog> FindAllByUserID(Guid userID);

        /// <summary>
        /// Loads a Blog based on its unique ID.
        /// </summary>
        /// <param name="id">The unique ID of the Blog.</param>
        /// <returns>The Blog.</returns>
        Owlpal.Models.Blog FindBlog(System.Guid ID);

        /// <summary>
        /// Loads an instance of Blog based on its Name.
        /// </summary>
        /// <param name="name">The unique ID of the Blog.</param>
        /// <returns>The Blog.</returns>
        Owlpal.Models.Blog FindBlogByName(string name);

        /// <summary>
        /// Loads a paginated collection of Blog based on userID.
        /// </summary>
        /// <param name="userID">The unique ID of the user.</param>
        /// <param name="pageIndex">The page index to start retrieving records.</param>
        /// <param name="pageSize">The number of records to retrieve in a given page.</param>
        /// <returns>A paginated collection of Blog.</returns>
        List<Owlpal.Models.Blog> FindAllBlogsByUserID(Guid userID, int pageIndex, int pageSize, out int count);
    }
}
